package com.nebula.salary.portal.service;

import com.nebula.salary.common.result.ServerResponse;
import com.nebula.salary.model.dto.WorkOvertimeDto;
import com.nebula.salary.model.pojo.WorkOvertime;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nebula.salary.model.vo.PageResult;
import com.nebula.salary.model.vo.WorkOvertimeVo;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 加班记录表 服务类
 * </p>
 *
 * @author codex
 * @since 2022-06-09
 */
public interface IWorkOvertimeService extends IService<WorkOvertime> {

    /**
     * 根据时间范围查询加班记录
     *
     * @param workOvertime 查询条件
     * @return WorkOvertimeVo集合
     */
    PageResult getRecord(WorkOvertimeDto workOvertime);

    /**
     * 根据时间范围查询加班总天数
     *
     * @param workOvertime 查询条件
     * @return 加班总天数
     */
    BigDecimal getTotalWorkOvertimeDays(WorkOvertimeDto workOvertime);

    /**
     * 今年加班数
     *
     * @return 今年加班数
     */
    ServerResponse<BigDecimal> getYearCount();

    /**
     * 加班打卡
     *
     * @param workOvertime 加班时间
     * @return 打卡结果
     */
    boolean clock(WorkOvertime workOvertime);

    /**
     * 删除加班记录
     *
     * @param recordIds 要删除的加班记录ID数组
     * @return 删除结果
     */
    ServerResponse<String> deleteRecords(Integer[] recordIds);

    /**
     * 验证参数
     *
     * @param workOvertime 实体类
     */
    void checkData(WorkOvertime workOvertime);

    /**
     * 验用户是否有数据权限
     *
     * @param recordIds 加班记录代号数组
     */
    void checkDataScope(Integer[] recordIds);
}
